package com.zp.self.module.level_4_算法练习.数据结构.二叉树;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @author By ZengPeng
 */
public class 力扣_107_二叉树的层序遍历II {
    @Test
    public void main() {

        System.out.println(levelOrderBottom(TreeNode.initRoot()));
    }

    /**
    题目：给你二叉树的根节点 root ，返回其节点值 自底向上的层序遍历 。 （即按从叶子节点所在层到根节点所在的层，逐层从左向右遍历）

     示例 1：
     输入：root = [3,9,20,null,null,15,7]
     输出：[[15,7],[9,20],[3]]

     示例 2：
     输入：root = [1]
     输出：[[1]]

     示例 3：
     输入：root = []
     输出：[]

    分析：【P 💔💔💔】
       1.深度递归：将节点按层级存放，饭后再倒转List
            --执行用时：0 ms, 在所有 Java 提交中击败了100.00%的用户
            --时长：4分钟

    边界值 & 注意点：
       1.
     **/
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        dfs(root,0,res);
        Collections.reverse(res);
        return res;
    }
    private void dfs(TreeNode root, int row, List<List<Integer>> res) {
        if(root== null) return;
        if(row==res.size()){
            List<Integer> rowList = new ArrayList<>();
            res.add(rowList);
        }
        res.get(row).add(root.val);
        dfs(root.left,row+1,res);
        dfs(root.right,row+1,res);
    }
}
